import axios from 'axios'
import router from '@/router'

// 引入ui中的消息盒子
import {MessageBox,Message} from 'element-ui'
//axios的一个系统配置栏目
const service = axios.create({
    baseURL:"http://localhost:8088",
    timeout:5000,  //操作5s都还没响应成功，直接超时
})
//请求拦截器  每次请求的时候 都要携带上Authorization 请求头
service.interceptors.request.use(
  config=>{
    //localStorage 浏览器的本地缓存，在登录成功后就把token 和对象名信息存入localStorage.token
    if(localStorage.getItem("token")){
      config.headers['Authorization'] = localStorage.getItem("token")
    }
    return config;
  },
  error =>{
    console.log(error);
    return Promise.reject(error);//前端的同步方法：ES6的语法Promise
  }
)

//响应拦截器 then(res=>{}).catch(err=>{}) 比如响应200 就正常执行业务即可
service.interceptors.response.use(
  response =>{
    
    const res = response.data;
    if(res.code == 200){
      Message({
        message:res.msg,
        type: 'success',
        duration:3*1000  //弹窗显示3s
      })
    }else if(res.code==401){
      Message({
        message:res.msg,
        type: 'error',
        duration:3*1000  //弹窗显示3s
      })
      localStorage.removeItem('token');
      localStorage.removeItem('userdata');
      localStorage.removeItem('userInfo');
      //上面的代码 清掉以后，必须发起一次url的改变，才会进入到 路由拦截器中
      // location.href = '/';
      router.router.push({path:'/'})
    }
    else if(res.code == 500){
      MessageBox.confirm(res.msg,"数据错误",{
        confirmButtonText:'确定',
        cancelButtonText:'取消',
        type:'warning'
      }).then(()=>{
        
      })
    }
    return res;
  },
  //后台返回的是500等状态码
  error=>{
    const err = error.response
    console.log('响应报错：'+error);
    if(err.status==403){
      Message({
        message:err.data.msg,
        type: 'error',
        duration:3*1000  //弹窗显示3s
      })
    }else if(err.status==401){
      Message({
        message:err.data.msg,
        type: 'error',
        duration:3*1000  //弹窗显示3s
      })
      localStorage.removeItem('token');
      localStorage.removeItem('userdata');
      localStorage.removeItem('userInfo');
      //上面的代码 清掉以后，必须发起一次url的改变，才会进入到 路由拦截器中
      location.href = '/';
    }
    else{
      MessageBox.confirm("服务器有bug，快去改！","后台报错",{
        confirmButtonText:'马上就去！',
        cancelButtonText:'就不改！',
        type:'warning'
      }).then(()=>{//消息盒子点确认
        Message({
          message:'点击确认！',
          type: 'success',
          duration:3*1000  //弹窗显示3s
        })
      }).catch(()=>{//消息盒子点取消
        Message({
          message:'点击取消！',
          type: 'success',
          duration:3*1000  //弹窗显示3s
        })
      })
    }
  }
)
// ES的语法，类似java中定义一个方法，运行外部调用，但是你必须return
export default service